# 什么是小数据池?
# 小数据池就是Python中一种提高效率的方式,固定数据类型使用同一个内存地址
# 小数池 -- 支持: str,int,bool

# 小数据池是干嘛的?
# a = 1
# b = 1
# id 查看空间的内存地址   获取开辟空间的一种地址
# print(id(a))
# print(id(b))

    # 小数据池数字支持范围:  -5 ~ 256  *记住

    # a = 300
    # b = 300
    # print(id(a))
    # print(id(b))

    # 代码块:  一个文件,一个模块,一个函数,一个类,终端中每一行都一个代码块
    # 在python中是用字典的方式存储

    # a = 1000
    # b = 1000
    # print(id(a))
    # print(id(b))

    # is # 判断两个内存地址是否相同     # 必须记住
    # == # 判断等号两边的值是否相同     # 必须记住

    # 字符串:
    #     1.字符串在做乘法的时候总长度不能超过20,进行驻留   # 记住
    #     2.自己定义的字符串 长度不限制 字符串必须(字母,数字.下划线)组成,进行驻留
    #     3.特殊字符(中文除外)定义1个时候,进行驻留
    #     4.字符串*1 其实就是赋值

    # 如果is判断相同 == 一定相同
    # 如果==判断相同 is 不一定相同

    # a = 1000
    # b = 1000
    # print(a == b)

    # a = "alexdsb" * 2
    # b = "alexdsb" * 2
    # print(a is b)

    # a = "12345678912345678qwertyuioqwertyuioQWERTYUIOWERTYUIOQWERTYUIOasdfghjksdfghjk____asdgadsfasdfgasdgasdgfsdaf"
    # b = "12345678912345678qwertyuioqwertyuioQWERTYUIOWERTYUIOQWERTYUIOasdfghjksdfghjk____asdgadsfasdfgasdgasdgfsdaf"
    # print(a is b)

    # a = "你"
    # b = "你"
    # print(a is b)   # pycharm中是True 因为执行了代码块,终端中是False

    # a = "@"
    # b = "@"
    # print(a is b)

    # a = "你好"
    # b = a * 1
    # print(a is b)

    # 先执行代码块,不符合代码块才会执行小数据


# 代码块的规则:
    # 数字: 全部驻留
    # 字符串:
        #1.字符做乘法的时候总长度不能超过20
        #2.自定定义的都驻留
        #3.乘数为1的时候 就是赋值
        #4.python3.7 乘法的时候总长度不能超过4096

# 总结:
    # 小数池 -- 支持: str,int,bool
    #小数据池数字: -5 ~ 256
    #小数据池字符串: 乘法时长度不能超过20

# 怎么能自己驻留?
#需要使用python的内置模块

# from sys import intern
# a = intern("@@@@@@"*20)
# b = intern("@@@@@@"*20)
# print(a is b)        # 自己进行驻留

# 小数据在哪用?
# 1.面试的时候偶尔会用到
# 2.解决自己的疑惑